iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Modern Web

MySQL,我的超人系列 第 14

Day14-MySQL的併發(Concurrency)-髒讀Dirty Reads、排他鎖、共享鎖

  • 分享至 

  • xImage
  •  

排他鎖Exclusive Lock & 共享鎖Shared Lock

為了維持資料的一致姓,MySQL使用鎖來確保交易的隔離性,鎖又可以分為排他、共享

共享鎖

1.讀鎖
2.被上共享鎖的資料能被讀取,不能被更新
3.讀取、更新兩交易發生在同筆資料,共享鎖會防止讀取前更新資料

排他鎖

1.寫鎖
2.資料的增查刪改只能被一個交易擁有,其他交易必須等其被釋放

髒讀Dirty Reads

A交易開始,隔離層級設定為Read uncommitted,執行但未提交,B交易讀取資料,讀取到A交易後的值,但A交易發生意外回滾復原,這時便會出現A交易後實際值!==B交易讀取值,這被稱為髒讀

https://ithelp.ithome.com.tw/upload/images/20220928/20144865B3bfMQVV5l.jpg

程式碼演示

1.A交易開始,更新帳戶值從100扣除到50

USE day14;
 START TRANSACTION;
 UPDATE bank
 SET account=50
 WHERE id = 1;
 -- 發生意外所以沒有提交,交易失敗
 

2.B交易開始,讀取到A交易未提交的髒值50

USE day14;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT *
FROM bank
WHERE id = 1

https://ithelp.ithome.com.tw/upload/images/20220928/20144865gDwJqJcZcO.jpg
3.A交易失敗,回滾,回復到交易前的值100

ROLLBACK;

https://ithelp.ithome.com.tw/upload/images/20220928/20144865EulCpVVGkO.jpg

預告

Day15-MySQL的併發(Concurrency)-更新丟失Lost Updates、樂觀&悲觀鎖


上一篇
Day13-MySQL的併發(Concurrency)-髒讀、更新丟失、幻讀、不可重複讀
下一篇
Day15-MySQL的併發(Concurrency)-更新丟失Lost Updates、樂觀&悲觀鎖
系列文
MySQL,我的超人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言